package com.tbit.main.dao.log;

import com.tbit.main.pojo.DispatchLog;
import com.tbit.main.pojo.DispatchLogSta;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 调度记录
 *
 * @author Leon
 * 2019年11月12日 下午4:44:13
 */
public interface DispatchLogDao {
    /**
     * 添加
     *
     * @param dispatchLog
     */
    Integer insert(DispatchLog dispatchLog);

    /**
     * 按时间分组统计
     *
     * @param params
     * @return
     */
    List<DispatchLogSta> groupByTime(Map<String, Object> params);

    /**
     * 根据时间查询
     *
     * @param params
     * @return
     */
    List<DispatchLog> getByTime(Map<String, Object> params);

    /**
     * 根据运营区域和时间统计所有
     *
     * @param params
     * @return
     */
    Integer getByAccountIdTime(Map<String, Object> params);

    /**
     * 根据运营区域和时间统计所有
     *
     * @param params
     * @return
     */
    Integer getByRegionIdTime(Map<String, Object> params);

    /**
     * 根据运营区域按天分组
     *
     * @param params
     * @return
     */
    List<Map<String, Object>> getGroupByDay(Map<String, Object> params);

    /**
     * 根据分区按天分组
     *
     * @param params
     * @return
     */
    List<Map<String, Object>> getRegionIdGroupByDay(Map<String, Object> params);

    /**
     * 统计前一天的数据
     *
     * @return
     */
    Map<String, Object> statYesterdayOrder(Map<String, Object> params);

    /**
     * 统计前一天的数据
     *
     * @return
     */
    Map<String, Object> statRegionIdYesterdayOrder(Map<String, Object> params);

    /**
     * 根据id查询
     *
     * @param dispatchLogId
     * @return
     */
    DispatchLog getById(Integer dispatchLogId);

    /**
     * 根据ids查询
     *
     * @param dispatchLogIds
     * @return
     */
    List<DispatchLog> getByIds(String dispatchLogIds);


    /**
     * 根据车辆和时间查询
     *
     * @param map
     * @return
     */
    List<DispatchLog> getByMachineIdTime(Map<String, Object> map);

    /**
     * 更新
     *
     */
    void update(DispatchLog dispatchLog);

    /**
     * 将当前记录置为无效
     * @param dispatchLogIdList 当前调度记录idList
     * @param isValid 是否有效
     * @param remark 备注
     */
    void updateAuditToInvalidByDispatchLogIdList(@Param("dispatchLogIdList") List<Integer> dispatchLogIdList, @Param("isValid") Integer isValid, @Param("remark") String remark);

    /**
     * 查询当前车辆审核中的调度记录
     * @param machineId 车辆id
     * @return
     */
    List<DispatchLog> getUnderReviewByMachineId(@Param("machineId") Integer machineId);

    /**
     * 根据调度编号列表查询
     * @param dispatchLogIdList 编号列表
     * @return 调度列表
     */
    List<DispatchLog> selectDispatchLogIds(@Param("dispatchLogIdList") List<Integer> dispatchLogIdList);

    /**
     * 更新首次产生订单时间和有效订单数
     * @param machineId 车辆 id
     */
    void updateFistOrderTimeAndAfterValidOrder(Integer machineId);

    /**
     * 根据车辆id查询7天内最后有效调度记录
     *
     * @param machineId 车辆id
     */
    DispatchLog selectLast7DayFirstValidByMachineId(Integer machineId);
}